#ifndef _NE_PARTICLE_AFFECTOR_H_
#define _NE_PARTICLE_AFFECTOR_H_

#include <partical/Particle.h>

namespace ne
{
    class NEAPI ParticleAffector
    {
        public:
            explicit ParticleAffector(const std::string &type);

            ParticleAffector(const ParticleAffector &affector);

            virtual const std::string& getAffectorType() const;

            virtual void setEnable(const bool b);
            virtual void enable();
            virtual void disable();
            virtual bool isEnable() const;

            virtual bool affectParticles(ParticleList &particleList, const real interval);

            virtual ~ParticleAffector();

         private:
            ParticleAffector();

            ParticleAffector& operator = (const ParticleAffector &);

        protected:
            const std::string mAffectorType;
            bool mEnable;
    };

    typedef std::vector<ParticleAffector*> ParticleAffectorVector;
    typedef ParticleAffectorVector::iterator ParticleAffectorVectorIterator;
    typedef ParticleAffectorVector::const_iterator ParticleAffectorVectorConstIterator;

    typedef std::list<ParticleAffector*> ParticleAffectorList;
    typedef ParticleAffectorList::iterator ParticleAffectorListIterator;
    typedef ParticleAffectorList::const_iterator ParticleAffectorListConstIterator;

    typedef std::map<std::string, ParticleAffector*> ParticleAffectorMap;
    typedef ParticleAffectorMap::iterator ParticleAffectorMapIterator;
    typedef ParticleAffectorMap::const_iterator ParticleAffectorMapConstIterator;
}

#endif
